package com.young4j.xinsuiwutuobang.util;

import java.util.HashMap;
import java.util.Map;
import java.util.Set;

/**
 * bean 容器
 * 
 * 我们需要获取所有被young4j框架管理的Bean类，此时需要调用ClassHelper类的getBeanClassset方法获取素有的类，随后
 * 调用ReflectionUtil类的newInstance方法获取类的实例，根据类来实例化对象，最后将每次创建的对象放入一个静态的Map<Class<?>,Object>中，
 * 我们需要随时获取Map的key（类名）去获取所对应的value（Bean对象）
 * @author Administrator
 *
 */
public final class BeanHelper {
	/**
	 * 定义Bean映射（用于存放Bean类与Bean实例的映射关系）
	 */
	private static final Map<Class<?>,Object> BEAN_MAP = new HashMap<Class<?>,Object>();
	static {
		Set<Class<?>> beanClassSet = ClassHelper.getBeanClassSet();
		for(Class<?> beanClass : beanClassSet){
			Object obj = ReflectionUtils.newInstance(beanClass);
			BEAN_MAP.put(beanClass, obj);
		}
	}
	/**
	 * 获取Bean实例
	 * @param cls
	 * @return
	 */
	@SuppressWarnings("unchecked")
	public static <T> T getBean(Class<T> cls){
		if(!BEAN_MAP.containsKey(cls)){
			throw new RuntimeException("can not get bean by class:" + cls);
		}
		return (T) BEAN_MAP.get(cls);
	}
	/**
	 * 获取所有Bean实例
	 * @return
	 */
	public static Map<Class<?>,Object> getBean(){
		return BEAN_MAP;
	}
}
